package com.inossem.emergency.utils;

import android.text.TextUtils;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.inossem.emergency.constant.UrlConstant;
import com.inossem.wms.vo.auth.SysResourcesVo;

import java.util.List;

/**
 * 缓存框架工具类
 *
 * @author 詹建宇
 * @time on 2018/12/6 14:35
 * @email jianyu.zhan@inossem.com
 */
public class ACacheUtils {

    //网络协议
    public static final String KEY_PROTOCOL = "key_protocol";
    //服务器
    public static final String KEY_DOMAIN = "key_domain";
    //端口号
    public static final String KEY_PORT = "key_port";
    //URL
    public static final String KEY_URL = "key_url";

    //用户帐号
    public static final String KEY_ACCOUNT = "key_account";
    //用户密码(已MD5加密)
    public static final String KEY_PASSWORD = "key_password";
    //用户姓名
    public static final String KEY_NAME = "key_name";
    //用户Token
    public static final String KEY_TOKEN = "key_token";
    //仓库
    public static final String KEY_STORE = "key_store";

    //登录人所属工厂及仓库等基础信息
    public static final String KEY_USER_LOCATION = "key_user_location";
    //当前基础信息属于哪个用户 空为未保存
    public static final String KEY_USER_BASE_DATA = "key_user_base_data";

    //当前模块需要储存的bean类 存json
    public static final String KEY_JSON = "key_json";
    //当前模块需要储存的bean类 存需要对比数据的json
    public static final String KEY_COMPARE_JSON = "key_compare_json";

    //离线数据存储时间
    public static final String KEY_SAVE_TIME = "key_save_time";

    //消息推送
    public static final String KEY_PUSH = "key_push";
    //声音
    public static final String KEY_VOICE = "key_voice";
    //震动
    public static final String KEY_VIBRATION = "key_vibration";
    //字体
    public static final String KEY_FONT = "key_font";
    //语言
    public static final String KEY_LANGUAGE = "key_language";
    //语言
    public static final String KEY_LANGUAGE_NAME = "key_language_name";
    //热敏打印机地址
    public static final String KEY_THERMAL_PRINT_DOMAIN = "key_thermal_print_domain";
    //热敏打印机端口
    public static final String KEY_THERMAL_PRINT_PORT = "key_thermal_print_port";
    //柔性抗金属RFID打印机地址
    public static final String KEY_FLEXIBLE_PRINT_DOMAIN = "key_flexible_print_domain";
    //柔性抗金属RFID打印机端口
    public static final String KEY_FLEXIBLE_PRINT_PORT = "key_flexible_print_port";
    //普通RFID打印机地址
    public static final String KEY_COMMON_PRINT_DOMAIN = "key_common_print_domain";
    //普通RFID打印机端口
    public static final String KEY_COMMON_PRINT_PORT = "key_common_print_port";

    //功能模块列表
    public static final String KEY_MENU_LIST = "key_menu_list";

    //此时需要审批的单据
    public static final String KEY_APPROVAL = "key_approval";

    public static final String KEY_TIDY_ADD_OTHER = "key_tidy_add_other";
    public static final String KEY_TIDY_ADD_OTHER_SUBMIT = "key_tidy_add_other_submit";
    public static final String KEY_CALCULATION_JSON = "key_calculation_json";
    public static final String KEY_CALCULATION_RETURN_JSON = "key_calculation_return_json";

    //蓝牙设备地址
    public static final String KEY_BLUETOOTH_ADDRESS = "key_bluetooth_address";
    //蓝牙设备名称
    public static final String KEY_BLUETOOTH_NAME = "key_bluetooth_name";

    //所有单位
    public static final String KEY_UNIT_LIST = "key_unit_list";

    //是否显示假页面
    public static final String KEY_FAKE_LAYOUT = "key_fake_layout";

    //========================================单据相关==============================================
    /*
     * OrderJson存显示的数据 CompareOrderJson存对比数据
     * 离线时 OrderJson存离线数据 CompareOrderJson不存数据
     * 在线时 有离线数据 OrderJson存离线数据 CompareOrderJson存在线数据
     *        无离线数据 OrderJson存在线数据 CompareOrderJson不存数据
     */

    /**
     * 获取订单json
     */
    public static String getOrderJson() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_JSON);
        return TextUtils.isEmpty(value) ? "" : value;
    }

    /**
     * 保存订单json
     */
    public static void setOrderJson(String json) {
        ACache aCache = ACache.get();
        aCache.put(KEY_JSON, json);
    }

    /**
     * 删除订单信息
     */
    public static void removeOrderJson() {
        ACache aCache = ACache.get();
        aCache.remove(KEY_JSON);
    }

    /**
     * 获取订单json(对比数据)
     */
    public static String getCompareOrderJson() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_COMPARE_JSON);
        return TextUtils.isEmpty(value) ? "" : value;
    }

    /**
     * 保存订单json(对比数据)
     */
    public static void setCompareOrderJson(String json) {
        ACache aCache = ACache.get();
        aCache.put(KEY_COMPARE_JSON, json);
    }

    /**
     * 删除订单信息(对比数据)
     */
    public static void removeCompareOrderJson() {
        ACache aCache = ACache.get();
        aCache.remove(KEY_COMPARE_JSON);
    }
    //==============================================================================================

    /**
     * 获取协议
     */
    public static String getProtocol() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_PROTOCOL);
        return TextUtils.isEmpty(value) ? UrlConstant.DEFAULT_HTTP : value;
    }

    /**
     * 保存协议
     */
    public static void setProtocol(String domain) {
        ACache aCache = ACache.get();
        aCache.put(KEY_PROTOCOL, domain);
    }

    /**
     * 获取服务器
     */
    public static String getDomain() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_DOMAIN);
        return TextUtils.isEmpty(value) ? UrlConstant.DEFAULT_DOMAIN : value;
    }

    /**
     * 保存服务器
     */
    public static void setDomain(String domain) {
        ACache aCache = ACache.get();
        aCache.put(KEY_DOMAIN, domain);
    }

    /**
     * 获取端口号
     */
    public static String getPort() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_PORT);
        return TextUtils.isEmpty(value) ? UrlConstant.DEFAULT_PORT : value;
    }

    /**
     * 保存端口号
     */
    public static void setPort(String port) {
        ACache aCache = ACache.get();
        aCache.put(KEY_PORT, port);
    }

    /**
     * 获取URL
     */
    public static String getUrl() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_URL);
        return TextUtils.isEmpty(value) ? UrlConstant.DEFAULT_DOMAIN : value;
    }

    /**
     * 保存RUL
     */
    public static void setUrl(String port) {
        ACache aCache = ACache.get();
        aCache.put(KEY_URL, port);
    }

    /**
     * 获取用户帐号
     */
    public static String getUserAccount() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_ACCOUNT);
        return TextUtils.isEmpty(value) ? "" : value;
    }

    /**
     * 保存用户帐号
     */
    public static void setUserAccount(String userAccount) {
        ACache aCache = ACache.get();
        aCache.put(KEY_ACCOUNT, userAccount);
    }


    /**
     * 获取用户密码
     */
    public static String getPassword() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_PASSWORD);
        return TextUtils.isEmpty(value) ? "" : value;
    }

    /**
     * 保存用户密码
     */
    public static void setPassword(String password) {
        ACache aCache = ACache.get();
        aCache.put(KEY_PASSWORD, password);
    }

    /**
     * 获取用户姓名
     */
    public static String getUserName() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_NAME);
        return TextUtils.isEmpty(value) ? "" : value;
    }

    /**
     * 保存用户姓名
     */
    public static void setUserName(String userName) {
        ACache aCache = ACache.get();
        aCache.put(KEY_NAME, userName);
    }

    /**
     * 获取用户Token
     */
    public static String getToken() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_TOKEN);
        return TextUtils.isEmpty(value) ? "" : value;
    }

    /**
     * 保存用户Token
     */
    public static void setToken(String token) {
        ACache aCache = ACache.get();
        aCache.put(KEY_TOKEN, token);
    }

    /**
     * 获取仓库
     */
    public static String getStore() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_STORE);
        return TextUtils.isEmpty(value) ? "" : value;
    }

    /**
     * 保存仓库
     */
    public static void setStore(String store) {
        ACache aCache = ACache.get();
        aCache.put(KEY_STORE, store);
    }

//    /**
//     * 获取此登录用户所属的工厂 库存地点等信息
//     */
//    public static DicStockLocationAndWhTreeVo getLocationData() {
//        ACache aCache = ACache.get();
//        String json = aCache.getAsString(KEY_USER_LOCATION);
//        if (TextUtils.isEmpty(json)) {
//            return null;
//        } else {
//            return new Gson().fromJson(json, DicStockLocationAndWhTreeVo.class);
//        }
//    }
//
//    /**
//     * 保存此登录用户所属的工厂 库存地点等信息
//     */
//    public static void setLocationData(DicStockLocationAndWhTreeVo bean) {
//        ACache aCache = ACache.get();
//        if (null == bean) {
//            aCache.remove(KEY_USER_LOCATION);
//        } else {
//            aCache.put(KEY_USER_LOCATION, new Gson().toJson(bean));
//        }
//    }

    /**
     * 获取是否保存了基础数据 返回用户信息
     */
    public static String getBaseDataForUser() {
        ACache aCache = ACache.get();
        String user = aCache.getAsString(KEY_USER_BASE_DATA);
        return null == user ? "" : user;
    }

    /**
     * 保存是否保存了基础数据
     */
    public static void setBaseDataForUser(String user) {
        ACache aCache = ACache.get();
        aCache.put(KEY_USER_BASE_DATA, user);
    }

    /**
     * 是否开启消息推送
     */
    public static Boolean getPushStatus() {
        ACache aCache = ACache.get();
        Boolean haveBaseData = (Boolean) aCache.getAsObject(KEY_PUSH);
        return null == haveBaseData ? false : haveBaseData;
    }

    /**
     * 保存消息图送是否开启
     */
    public static void setPustStatus(Boolean haveBaseData) {
        ACache aCache = ACache.get();
        aCache.put(KEY_PUSH, haveBaseData);
    }

    /**
     * 是否开启声音
     */
    public static Boolean getVoiceStatus() {
        ACache aCache = ACache.get();
        Boolean haveBaseData = (Boolean) aCache.getAsObject(KEY_VOICE);
        return null == haveBaseData ? false : haveBaseData;
    }

    /**
     * 保存声音是否开启
     */
    public static void setVoiceStatus(Boolean haveBaseData) {
        ACache aCache = ACache.get();
        aCache.put(KEY_VOICE, haveBaseData);
    }

    /**
     * 是否开启震动
     */
    public static Boolean getVibrationStatus() {
        ACache aCache = ACache.get();
        Boolean haveBaseData = (Boolean) aCache.getAsObject(KEY_VIBRATION);
        return null == haveBaseData ? false : haveBaseData;
    }

    /**
     * 保存震动是否开启
     */
    public static void setVibrationStatus(Boolean haveBaseData) {
        ACache aCache = ACache.get();
        aCache.put(KEY_VIBRATION, haveBaseData);
    }

    /**
     * 获取离线单据保存时间(秒)
     * 默认7天
     */
    public static Integer getSaveTime() {
        ACache aCache = ACache.get();
        Integer saveTime = (Integer) aCache.getAsObject(KEY_SAVE_TIME);
        if (null == saveTime) saveTime = 7 * 24 * 60 * 60;
        return saveTime;
    }

    /**
     * 保存离线单据保存时间(秒)
     */
    public static void setSaveTime(Integer saveTime) {
        ACache aCache = ACache.get();
        aCache.put(KEY_SAVE_TIME, saveTime);
    }

    /**
     * 获取字体
     */
    public static int getFont() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_FONT);
        return TextUtils.isEmpty(value) ? UrlConstant.DEFAULT_FONT : Integer.parseInt(value);
    }

    /**
     * 保存字体
     */
    public static void setFont(int font) {
        ACache aCache = ACache.get();
        aCache.put(KEY_FONT, String.valueOf(font));
    }

//    /**
//     * 获取语言
//     */
//    public static String getLanguage() {
//        ACache aCache = ACache.get();
//        String value = aCache.getAsString(KEY_LANGUAGE);
//        return TextUtils.isEmpty(value) ? UrlConstant.DEFAULT_LANGUAGE : value;
//    }
//
//    /**
//     * 保存语言
//     */
//    public static void setLanguage(String language) {
//        ACache aCache = ACache.get();
//        aCache.put(KEY_LANGUAGE, language);
//    }

//    /**
//     * 获取语言名
//     */
//    public static String getLanguageName() {
//        ACache aCache = ACache.get();
//        String value = aCache.getAsString(KEY_LANGUAGE_NAME);
//        return TextUtils.isEmpty(value) ? UrlConstant.DEFAULT_LANGUAGE_NAME : value;
//    }

    /**
     * 保存语言名
     */
    public static void setLanguageName(String language) {
        ACache aCache = ACache.get();
        aCache.put(KEY_LANGUAGE_NAME, language);
    }

    /**
     * 获取热敏打印机地址
     */
    public static String getThermalPrintDomain() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_THERMAL_PRINT_DOMAIN);
        return TextUtils.isEmpty(value) ? UrlConstant.DEFAULT_DOMAIN : value;
    }

    /**
     * 保存热敏打印机地址
     */
    public static void setThermalPrintDomain(String domain) {
        ACache aCache = ACache.get();
        aCache.put(KEY_THERMAL_PRINT_DOMAIN, domain);
    }

    /**
     * 获取热敏打印机端口
     */
    public static String getThermalPrintPort() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_THERMAL_PRINT_PORT);
        return TextUtils.isEmpty(value) ? UrlConstant.DEFAULT_PORT : value;
    }

    /**
     * 保存热敏打印机端口
     */
    public static void setThermalPrintPort(String domain) {
        ACache aCache = ACache.get();
        aCache.put(KEY_THERMAL_PRINT_PORT, domain);
    }

    /**
     * 获取柔性抗金属RFID打印机地址
     */
    public static String getFlexiblePrintDomain() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_FLEXIBLE_PRINT_DOMAIN);
        return TextUtils.isEmpty(value) ? UrlConstant.DEFAULT_DOMAIN : value;
    }

    /**
     * 保存柔性抗金属RFID打印机地址
     */
    public static void setFlexiblePrintDomain(String domain) {
        ACache aCache = ACache.get();
        aCache.put(KEY_FLEXIBLE_PRINT_DOMAIN, domain);
    }

    /**
     * 获取柔性抗金属RFID打印机端口
     */
    public static String getFlexiblePrintPort() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_FLEXIBLE_PRINT_PORT);
        return TextUtils.isEmpty(value) ? UrlConstant.DEFAULT_PORT : value;
    }

    /**
     * 保存柔性抗金属RFID打印机端口
     */
    public static void setFlexiblePrintPort(String domain) {
        ACache aCache = ACache.get();
        aCache.put(KEY_FLEXIBLE_PRINT_PORT, domain);
    }

    /**
     * 获取普通RFID打印机地址
     */
    public static String getCommonPrintDomain() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_COMMON_PRINT_DOMAIN);
        return TextUtils.isEmpty(value) ? UrlConstant.DEFAULT_DOMAIN : value;
    }

    /**
     * 保存普通RFID打印机地址
     */
    public static void setCommonPrintDomain(String domain) {
        ACache aCache = ACache.get();
        aCache.put(KEY_COMMON_PRINT_DOMAIN, domain);
    }

    /**
     * 获取普通RFID打印机端口
     */
    public static String getCommonPrintPort() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_COMMON_PRINT_PORT);
        return TextUtils.isEmpty(value) ? UrlConstant.DEFAULT_PORT : value;
    }

    /**
     * 保存普通RFID打印机端口
     */
    public static void setCommonPrintPort(String domain) {
        ACache aCache = ACache.get();
        aCache.put(KEY_COMMON_PRINT_PORT, domain);
    }

    /**
     * 获取菜單
     */
    public static List<SysResourcesVo> getMenuList() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_MENU_LIST);
        return new Gson().fromJson(value, new TypeToken<List<SysResourcesVo>>() {
        }.getType());
    }

    /**
     * 保存菜單
     */
    public static void setMenuList(List<SysResourcesVo> menuList) {
        ACache aCache = ACache.get();
        aCache.put(KEY_MENU_LIST, new Gson().toJson(menuList));
    }

//    /**
//     * 获取此时需要审批的订单json
//     */
//    public static WfProcTaskSearchVo.ItemListBean getApprovalOrder() {
//        ACache aCache = ACache.get();
//        String value = aCache.getAsString(KEY_APPROVAL);
//        return new Gson().fromJson(value, WfProcTaskSearchVo.ItemListBean.class);
//    }
//
//    /**
//     * 保存此时需要审批的订单json
//     */
//    public static void setApprovalOrder(WfProcTaskSearchVo.ItemListBean vo) {
//        ACache aCache = ACache.get();
//        aCache.put(KEY_APPROVAL, new Gson().toJson(vo));
//    }

    /**
     * 删除此时需要审批的订单信息
     */
    public static void removeApprovalOrder() {
        ACache aCache = ACache.get();
        aCache.remove(KEY_APPROVAL);
    }

//    /**
//     * 获取单位列表
//     */
//    public static List<DicUnitDecimalPlaceVo> getUnitList() {
//        ACache aCache = ACache.get();
//        String value = aCache.getAsString(KEY_UNIT_LIST);
//        if (TextUtils.isEmpty(value)) return new ArrayList<>();
//        else
//            return new Gson().fromJson(value, new TypeToken<List<DicUnitDecimalPlaceVo>>() {
//            }.getType());
//    }
//
//    /**
//     * 保存单位列表
//     */
//    public static void setUnitList(List<DicUnitDecimalPlaceVo> unitList) {
//        ACache aCache = ACache.get();
//        aCache.put(KEY_UNIT_LIST, new Gson().toJson(unitList));
//    }

    /**
     * 删除单位列表
     */
    public static void removeUnitList() {
        ACache aCache = ACache.get();
        aCache.remove(KEY_UNIT_LIST);
    }

    /**
     * 仓库整理搜索数据json
     */
    public static String getTidyAddJson() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_TIDY_ADD_OTHER);
        return TextUtils.isEmpty(value) ? "" : value;
    }

    /**
     * 仓库整理搜索数据保存json
     */
    public static void setTidyAddJson(String json) {
        ACache aCache = ACache.get();
        aCache.put(KEY_TIDY_ADD_OTHER, json);
    }

    /**
     * 删除仓库整理搜索数据
     */
    public static void removeTidyAddJson() {
        ACache aCache = ACache.get();
        aCache.remove(KEY_TIDY_ADD_OTHER);
    }

    /**
     * 仓库整理搜索数据json
     */
    public static String getTidyAddJsonSub() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_TIDY_ADD_OTHER_SUBMIT);
        return TextUtils.isEmpty(value) ? "" : value;
    }

    /**
     * 仓库整理搜索数据保存json
     */
    public static void setTidyAddJsonSub(String json) {
        ACache aCache = ACache.get();
        aCache.put(KEY_TIDY_ADD_OTHER_SUBMIT, json);
    }

    /**
     * 删除仓库整理搜索数据
     */
    public static void removeTidyAddJsonSub() {
        ACache aCache = ACache.get();
        aCache.remove(KEY_TIDY_ADD_OTHER_SUBMIT);
    }

    /**
     * 获取是否显示假页面布尔值
     */
    public static Boolean getShowFakeLayout() {
//        ACache aCache = ACache.get();
//        Boolean flag = (Boolean) aCache.getAsObject(KEY_FAKE_LAYOUT);
//        return null == flag ? false : flag;
        return true;
    }

    /**
     * 保存是否显示假页面布尔值
     */
    public static void setShowFakeLayout(Boolean flag) {
        ACache aCache = ACache.get();
        aCache.put(KEY_FAKE_LAYOUT, flag);
    }

    /**
     * 删除是否显示假页面布尔值
     */
    public static void removeShowFakeLayout() {
        ACache aCache = ACache.get();
        aCache.remove(KEY_FAKE_LAYOUT);
    }
    /*请求接口回来的*/

    /**
     * 盘点搜索数据json
     */
    public static String getCalculationAddJson() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_CALCULATION_JSON);
        return TextUtils.isEmpty(value) ? "" : value;
    }

    /**
     * 盘点搜索数据保存json
     */
    public static void setCalculationAddJson(String json) {
        ACache aCache = ACache.get();
        aCache.put(KEY_CALCULATION_JSON, json);
    }

    /**
     * 删除盘点搜索数据
     */
    public static void removeCalculationAddJson() {
        ACache aCache = ACache.get();
        aCache.remove(KEY_CALCULATION_JSON);
    }
    /*传给物料界面的*/

    /**
     * 盘点搜索数据json
     */
    public static String getCalculationMatJson() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_CALCULATION_RETURN_JSON);
        return TextUtils.isEmpty(value) ? "" : value;
    }

    /**
     * 盘点搜索数据保存json
     */
    public static void setCalculationMatJson(String json) {
        ACache aCache = ACache.get();
        aCache.put(KEY_CALCULATION_RETURN_JSON, json);
    }

    /**
     * 删除盘点搜索数据
     */
    public static void removeCalculationMatJson() {
        ACache aCache = ACache.get();
        aCache.remove(KEY_CALCULATION_RETURN_JSON);
    }
    /*物料界面返回的*/

    /**
     * 盘点搜索数据json
     */
    public static String getCalculationResultJson() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_CALCULATION_RETURN_JSON);
        return TextUtils.isEmpty(value) ? "" : value;
    }

    /**
     * 盘点搜索数据保存json
     */
    public static void setCalculationResultJson(String json) {
        ACache aCache = ACache.get();
        aCache.put(KEY_CALCULATION_RETURN_JSON, json);
    }

    /**
     * 删除盘点搜索数据
     */
    public static void removeCalculationResultJson() {
        ACache aCache = ACache.get();
        aCache.remove(KEY_CALCULATION_RETURN_JSON);
    }

    /**
     * 获取蓝牙设备
     */
    public static String getBluetoothAddress() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_BLUETOOTH_ADDRESS);
        return TextUtils.isEmpty(value) ? "" : value;
    }

    /**
     * 保存蓝牙设备
     */
    public static void setBluetoothAddress(String json) {
        ACache aCache = ACache.get();
        aCache.put(KEY_BLUETOOTH_ADDRESS, json);
    }

    /**
     * 获取蓝牙设备名称
     */
    public static String getBluetoothName() {
        ACache aCache = ACache.get();
        String value = aCache.getAsString(KEY_BLUETOOTH_NAME);
        return TextUtils.isEmpty(value) ? "" : value;
    }

    /**
     * 保存蓝牙设备名称
     */
    public static void setBluetoothName(String json) {
        ACache aCache = ACache.get();
        aCache.put(KEY_BLUETOOTH_NAME, json);
    }

}
